#include <iostream>
using namespace std;
int main(){
//声明四个浮点型变量，分别表示电压环的比例增益、积分增益、两个计算参数
float Kpv,Kiv,K1v,K2v;
//声明一个浮点型变量，表示采样周期
float Ts;
//声明两个浮点型变量，分别表示期望电流和实际电流
float IL_Bal_v,IL_v_LPF;
//声明两个浮点型变量，分别表示电压平衡误差和上一次的电压平衡误差
float Er_Bal_v,Er_Bal_v_k1;
//声明两个浮点型变量，分别表示电压平衡控制器的输出和上一次的电压平衡控制器的输出
float PI_Bal_v,PI_Bal_v_k1;
float Duty_Peroid;//全栈
float CMPA;//输出的栈空比


//给电压环的比例增益和积分增益赋值
Kpv=1.8;
Kiv=290;

//以下是电压平衡控制
//根据比例增益、积分增益和采样周期计算第一个参数
K1v=Kpv+Kiv*Ts*0.5;//电压环参数
//根据比例增益、积分增益和采样周期计算第二个参数
K2v=-Kpv+Kiv*Ts*0.5;
//计算电压平衡误差，即期望电流减去实际电流
Er_Bal_v=IL_Bal_v-IL_v_LPF;//IL_v_LPF是测量值,

//计算电压平衡控制器的输出，即上一次的输出加上两个参数乘以当前误差和上一次误差
PI_Bal_v=PI_Bal_v_k1+K1v*Er_Bal_v+K2v*Er_Bal_v_k1;

//如果电压平衡控制器的输出超过了100000，就将其限制在100000
if(PI_Bal_v>100000)//限制电压环输出的最大值
{
    PI_Bal_v=100000;
}

//更新上一次的电压平衡误差
Er_Bal_v_k1=Er_Bal_v;//更新前两次误差

//更新上一次的电压平衡控制器的输出
PI_Bal_v_k1=PI_Bal_v;//更新前两次输出

CMPA=PI_Bal_v*Duty_Peroid;//栈空比输出
}